package org.comtel.javafx.control;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.geometry.Side;
import javafx.scene.Node;
import javafx.scene.transform.Scale;
import javafx.stage.WindowEvent;
public class MultiKeyButton extends KeyButton {
private ObservableList<KeyButton> extKeyCodes;
private MultiKeyPopup context;
private final SimpleDoubleProperty scaleProperty;
public MultiKeyButton(SimpleDoubleProperty scaleProperty) {
this.scaleProperty = scaleProperty;
}
public ObservableList<KeyButton> getExtKeyCodes() {
if (extKeyCodes == null) {
extKeyCodes = FXCollections.observableArrayList();
extKeyCodes.addListener(new ListChangeListener<KeyButton>() {
public void onChanged(Change<? extends KeyButton> c) {
while (c.next()) {
for (KeyButton button : c.getAddedSubList()) {
getContext().getButtons().add(button);
}
}
}
});
}
return extKeyCodes;
}
public MultiKeyPopup getContext() {
if (context == null) {
context = new MultiKeyPopup();
context.setOnHidden(new EventHandler<WindowEvent>() {
public void handle(WindowEvent event) {
getParent().getParent().setEffect(null);
getParent().getParent().setDisable(false);
}
});
setOnLongPressed(new EventHandler<Event>() {
public void handle(Event event) {
context.getButtonPane().getTransforms().setAll(new Scale(scaleProperty.get(),scaleProperty.get(),1,0,0,0));
//getParent().getParent().setEffect(new BoxBlur());
getParent().getParent().setDisable(true);
setFocused(false);
context.show((Node) event.getSource(), Side.TOP, -getPrefWidth(), -getPrefHeight());
}
});
}
return context;
}
public void addExtKeyCode(int extKeyCode) {
addExtKeyCode(extKeyCode, null, null);
}
public void addExtKeyCode(int extKeyCode, String label, ObservableList<String> styleClasses) {
ShortPressKeyButton button = new ShortPressKeyButton(Character.toString((char) extKeyCode));
if (styleClasses != null) {
button.getStyleClass().addAll(styleClasses);
}else{
button.setId("key-context-button");
}
if (label != null){
button.setText(label);
}
button.setFocusTraversable(false);
//TODO: add to css style
button.setPrefWidth(this.getPrefWidth());
button.setPrefHeight(this.getPrefHeight());
button.setKeyCode(extKeyCode);
button.setOnShortPressed(getOnShortPressed());
getExtKeyCodes().add(button);
}
public boolean isContextAvailable() {
return context != null && extKeyCodes != null;
}
}